#ifndef SYNCROOTFOLDERCOMMAND_H
#define SYNCROOTFOLDERCOMMAND_H

#include "base_command.h"
#include <QString>
#include <QNetworkReply>
#include <QJsonArray>
#include <QJsonObject>

// SyncRootFolderCommand 命令类
// 负责同步网盘的根文件夹数据
class SyncRootFolderCommand : public BaseCommand
{
    Q_OBJECT

public:
    explicit SyncRootFolderCommand(QObject *parent = nullptr);
    ~SyncRootFolderCommand();
    
    // 设置 QNetworkAccessManager 实例（重写基类方法以连接信号）
    void setNetworkAccessManager(QNetworkAccessManager *networkManager);
    
    // 执行命令
    // diskId: 要同步的网盘ID
    // 返回：是否成功发起请求（异步操作，实际结果通过信号通知）
    bool execute(const QString &diskId);

signals:
    // 同步根文件夹完成信号
    void syncRootFolderCompleted(int resultCode, const QString &message);
    
    // 根文件夹数据同步信号（用于更新数据库）
    void syncRootFolderData(const QJsonArray &foldersData);

private slots:
    // 处理同步根文件夹响应
    void handleSyncRootFolderResponse(QNetworkReply *reply);

private:
    // 解析同步根文件夹响应
    void parseSyncRootFolderResponse(const QJsonObject &response);
    
    // 构建请求 URL
    QString buildRequestUrl(const QString &baseUrl, const QString &diskId);
    
    // 在工作目录创建对应的文件夹
    void createFoldersInWorkDirectory(const QJsonArray &foldersData);

private:
    QString m_pendingDiskId; // 待同步的网盘ID
};

#endif // SYNCROOTFOLDERCOMMAND_H

